package Figuras;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

public class Rectangulo extends FiguraConRelleno {

    private int anchoDelRectangulo;
    private int altoDelRectangulo;

    // Funciones Básicas para creación y uso de la Figura:
    public Rectangulo(Point2D puntoDeInicio, int ancho, int alto,
            Color colorDelBorde, Color colorDelRelleno, int grosorDelBorde) {
        super(puntoDeInicio, colorDelBorde, colorDelRelleno, grosorDelBorde);
        fijarAnchoDelRectangulo(ancho);
        fijarAltoDelRectangulo(alto);
    }

    public Rectangulo(int coordenadaX, int coordenadaY, int anchoRectangulo,
            int altoRectangulo, Color colorDelBorde, Color colorDelRelleno, int grosorDelBorde) {
        super(coordenadaX, coordenadaY, colorDelBorde, colorDelRelleno, grosorDelBorde);
        fijarAnchoDelRectangulo(anchoRectangulo);
        fijarAltoDelRectangulo(altoRectangulo);
    }

    @Override
    public void dibujarLaFigura(Graphics dibujarRectangulo) {
        Graphics2D dibujarRectangulo2D;
        Rectangle2D rectangulo;
        Stroke bordeDelRectangulo;
        if (dameElColorDelQueEstaRellenada() != null) {
            dibujarRectangulo.setColor(dameElColorDelQueEstaRellenada());
            dibujarRectangulo.fillRect((int) dameElInicioDeLaFigura().getX(),
                    (int) dameElInicioDeLaFigura().getY(),
                    dameElAnchoDelRectangulo(),
                    dameElAltoDelRectangulo());
        }
        rectangulo = new Rectangle2D.Float((int) dameElInicioDeLaFigura().getX(),
                (int) dameElInicioDeLaFigura().getY(),
                dameElAnchoDelRectangulo(),
                dameElAltoDelRectangulo());
        dibujarRectangulo2D = (Graphics2D) dibujarRectangulo;
        bordeDelRectangulo = new BasicStroke(dameElGrosorDelBordeDeLaFigura(),
                BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
        dibujarRectangulo2D.setColor(dameElColorDelBorde());
        dibujarRectangulo2D.setStroke(bordeDelRectangulo);
        dibujarRectangulo2D.draw(rectangulo);
    }

    @Override
    public boolean estaDentroDelAreaDeDibujo(int coordenadaX, int coordenadaY) {
        boolean estaDentro = false;
        boolean x1 = coordenadaX > dameElInicioDeLaFigura().getX();
        boolean x2 = coordenadaX < (dameElInicioDeLaFigura().getX() + dameElAnchoDelRectangulo());
        boolean y1 = coordenadaY > dameElInicioDeLaFigura().getY();
        boolean y2 = coordenadaY < (dameElInicioDeLaFigura().getY() + dameElAltoDelRectangulo());
        if (x1 && x2 && y1 && y2) {
            estaDentro = true;
        }
        return estaDentro;
    }

    @Override
    public void fijarPosicionDeLaFigura(int coordenadaX, int coordenadaY) {
        fijarElInicioDeLaFigura(coordenadaX, coordenadaY);
    }

    // Funciones Lógicas de la Figura:
    public final int dameElAnchoDelRectangulo() {
        return anchoDelRectangulo;
    }

    public final int dameElAltoDelRectangulo() {
        return altoDelRectangulo;
    }

    public final void fijarAnchoDelRectangulo(int anchoDelRectangulo) {
        this.anchoDelRectangulo = anchoDelRectangulo;
    }

    public final void fijarAltoDelRectangulo(int altoDelRectangulo) {
        this.altoDelRectangulo = altoDelRectangulo;
    }
}
